package com.zmn.plat.persistence.interfaces.servcategory;

import com.zmn.common.dto.StatusDTO;
import com.zmn.plat.model.entity.servcategory.ServCategory;
import com.zmn.plat.model.entity.servcategory.ServCategoryQuery;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author duanzuocai
 * @version v1.0
 * @类说明：服务类型数据表接口
 * @since 2018/10/23 15:00
 */
public interface ServCategoryDao {

    /**
     * 查询服务分类
     *
     * @param categId ID
     * @return
     */
    ServCategory findByKey(Integer categId);

    /**
     * 按照CategId降序查询第一条服务分类
     *
     * @return
     */
    ServCategory findFirstOneByCategIdAsc();

    /**
     * ID 查询
     *
     * @param ids
     * @return
     */
    List<ServCategory> findByKeys(@Param("ids") List<Integer> ids);

    /**
     * 名称查询
     *
     * @param name 名称
     * @return
     */
    ServCategory findByName(String name);

    /**
     * 根据渠道ID查询前台服务分类
     *
     * @param channelId 渠道ID
     * @param showType  产品分类 1后台 2前台
     * @return
     */
    List<ServCategory> listShowServCategoryByChannelId(@Param("channelId") Integer channelId, @Param("showType") Integer showType);

    /**
     * 根据渠道ID查询后台服务分类
     *
     * @param channelId 渠道ID
     * @param showType  产品分类 1后台 2前台
     * @return
     */
    List<ServCategory> listServCategoryByChannelId(@Param("channelId") Integer channelId, @Param("showType") Integer showType);

    /**
     * 通过渠道ID,城市ID获取服务区域下已开通的服务分类列表
     *
     * @param channelId 渠道ID
     * @param showType  产品分类 1后台 2前台
     * @param cityId    城市ID
     * @return
     */
    List<ServCategory> listServCategoryByChannelIdAndCityId(@Param("channelId") Integer channelId, @Param("showType") Integer showType, @Param("cityId") Integer cityId);

    /**
     * 搜索
     *
     * @param query 条件
     * @return
     */
    List<ServCategory> listByQuery(ServCategory query);

    /**
     * 描述: 查询所有服务分类
     *
     * @return java.util.List<com.zmn.plat.model.entity.servcategory.ServCategory>
     * @author jiafei
     * @since 2021/6/29 10:04
     */
    List<ServCategory> listAll();

    /**
     * 前台服务分类搜索
     *
     * @param query 条件
     * @return
     */
    List<ServCategory> listByQueryForShow(ServCategory query);

    /**
     * 分页搜索
     *
     * @param query 条件
     * @return
     */
    List<ServCategory> listPageByQuery(ServCategoryQuery query);

    /**
     * 前台服务分类分页搜索
     *
     * @param query 条件
     * @return
     */
    List<ServCategory> listPageByQueryForShow(ServCategoryQuery query);

    /**
     * 统计
     *
     * @param query 条件
     * @return
     */
    Integer countByQuery(ServCategoryQuery query);

    /**
     * 前台服务分类统计条数
     *
     * @param query
     * @return
     */
    Integer countByQueryForShow(ServCategoryQuery query);

    /**
     * 更新
     *
     * @param scateg 区域
     * @return
     */
    Integer updateByKey(ServCategory scateg);

    /**
     * 更新前台服务分类
     *
     * @param scateg 区域
     * @return
     */
    Integer updateFrontByKey(ServCategory scateg);

    /**
     * 更新排序
     *
     * @param category 条件
     * @return
     */
    Integer updateSortKey(ServCategory category);

    /**
     * 更新前台服务分类排序
     *
     * @param category 条件
     * @return
     */
    Integer updateShowSortKey(ServCategory category);

    /**
     * 更新前台服务分类名称首字母
     *
     * @param category 条件
     * @return
     */
    Integer updateShowFirstLetterKey(ServCategory category);

    /**
     * 更新前台服务分类名称简称
     *
     * @param category 条件
     * @return
     */
    Integer updateShowSimpleSpellByKey(ServCategory category);


    /**
     * 更新前台服务分类名称简称
     *
     * @param category 条件
     * @return
     */
    Integer updateSimpleSpellByKey(ServCategory category);

    /**
     * 批量更新状态
     *
     * @param dto 条件
     * @return
     */
    int updateStatusBatch(StatusDTO dto);

    /**
     * 批量更新前台服务分类状态
     *
     * @param dto 条件
     * @return
     */
    int updateShowStatusBatch(StatusDTO dto);

    /**
     * 更新名称
     *
     * @param category 条件
     * @return
     */
    int updateNameKey(ServCategory category);

    /**
     * 更新前台服务分类名称
     *
     * @param category 条件
     * @return
     */
    int updateShowNameKey(ServCategory category);

    /**
     * 插入
     *
     * @param scateg 对象
     * @return
     */
    Integer insert(ServCategory scateg);

    /**
     * 删除
     *
     * @param categId ID
     * @return
     */
    Integer deleteByKey(Integer categId);

}
